本篇除了介紹如何自行撰寫例外類別外,也會將前幾篇 例外的觀念 通通帶入至範例來使用。
在 D20:[Java]於程式中拋出例外 throw 文末提到
若有自己寫的例外類別 程式是無法自動拋出的
本篇就是介紹如何自行設計例外類別。
可以複習一次D18:[Java]例外類別 Throwable 中的 Throwable 的關係圖:
所有能夠處理的例外都是繼承 Exception 類別,因此我們自行設計的例外類別不外乎就是以下格式:
class 例外類別名稱 extends Exception
{
//自行定義
}
透過一範例來了解用法:
以下範例也會綜合相關例外的觀念,所以可以多看幾次唷!
首先自行設計一圓形例外,因為內建的 Exception 擁有極豐富的函數,因此甚至我們能不撰寫敘述也能使用
class CircleException extends Exception
{
}
在圓形類別當中,指定函數拋出例外(觀念複習 throws , new)
class CCircle
{
private double radius;
public void setRadius(double r) throws CCircleException
{
if(r<0)
{
throw new CircleException();
}
else
radius=r;
}
public void show()
{
System.out.println("面積="+3.14*radius*radius);
}
}
並在main() 中撰寫 try-catch-finally 區塊(觀念複習 不同類別拋出例外)
try
{
CCircle.setRadius(-100.0);
}
catch(CircleException e)
{
System.out.println(e+" 被拋出");
}
以上有了基本的程式架構後,讓我們看完整的程式範例:
class CircleException extends Exception
{
}
class CCircle
{
private double radius;
public void setRadius(double r) throws CircleException
{
if(r<0)
{
throw new CircleException();
}
else
radius=r;
}
public void show()
{
System.out.println("面積="+3.14*radius*radius);
}
}
public class exception_ex
{
public static void main(String args[])
{
CCircle cir=new CCircle();
try
{
cir.setRadius(-100.0);
}
catch(CircleException e)
{
System.out.println(e+" 被拋出");
}
cir.show();
}
}
在此範例,呼叫CCircle 中的setRadius 函數,傳入-100 的值
因此會拋出例外。
這時 catch 捕捉後會印出CircleException 被拋出,再執行最後的 cir.show();
此範例的輸出:
CCircleException 被拋出
area=0.0
Q:為什麼面積會是零呢?
A:因為例外拋出後,就沒有再做後續的處理;因此面積沒有被計算到 所以就為0
如果您喜歡我的文章,可以至 4xDev 的 Java 學習系列閱讀更多 Java 文章。